package main

import (
	"fmt"
)

// 接着练习 11.1 中的内容，创建第二个类型 RSimple，它也实现了接口 Simpler，写一个函数 fi()，使它可以区分 Simple 和 RSimple 类型的变量。

type Simpler interface {
	Get() float32
	Set(float32)
}

type Square struct {
	side float32
}

func (s *Square) Get() float32 {
	return s.side
}

func (s *Square) Set(f float32) {
	s.side = f
}

type RSimple struct {
	number int
	price  float32
}

func (r *RSimple) Get() float32 {
	return r.price
}

func (r *RSimple) Set(f float32) {
	r.price = f
}

func fi(simp Simpler) bool {
	switch simp.(type) {
	case *Square:
		return true
	case *RSimple:
		return true
	default:
		return false
	}
}

func main() {
	s := &Square{6.66}
	rs := new(RSimple)
	if fi(s) {
		fmt.Printf("s is a *Square or *RSimple: %T\n", s)
	}
	if fi(rs) {
		fmt.Printf("s is a *Square or *RSimple: %T\n", rs)
	}
}
